package com.solution.admin.customer.service;

import java.util.List;
import java.util.Map;

import com.solution.admin.customer.entity.CompanyEntity;
import com.solution.admin.customer.entity.CustomerEntity;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;

/**
 * 客户信息接口service接口层
 * @author solin
 * @date 2017-09-22 11:35:12
 */
public interface CustomerService {
	
	/**
	 * 我的客户-区域列表
	 * 
	 * @param param
	 * @return List<Map<String,String>>
	 * @author xu_cc
	 * @throws Exception
	 *             exception
	 * @Date 创建时间：2018年5月17日 下午10:51:37
	 */
	public List<Map<String, String>> listOfAreaCombo(Map<String, Object> param);

	/**
	 * 我的客户分页查询
	 * 
	 * @param pageParam
	 * @param param
	 * @return PageBean
	 * @author xu_cc
	 * @throws Exception
	 *             exception
	 * @Date 创建时间：2018年5月17日 下午10:51:26
	 */
	public PageBean listOfMyCustomerPage(PageParam pageParam, Map<String, Object> param);

	/**
	 * 保存客户信息
	 * @param customerEntity 客户信息实体
	 * @return Long 返回插入客户信息记录ID
	 * @author solin
	 * @date 2017-09-22 11:35:12
	 */
	public long saveCustomer(CustomerEntity customerEntity);
	
	
	/**
	 * 删除客户信息
	 * @param 
	 * @return int 返回删除记录条数
	 * @author solin
	 * @date 2017-09-22 11:35:12
	 */
	public int deleteCustomerById(long id);
	
	
	/**
	 * 根据ID查询客户信息
	 * @param id 客户信息id
	 * @return CustomerEntity 客户信息对象
	 * @author solin
	 * @date 2017-09-22 11:35:12
	 */
	public CustomerEntity getCustomerById(Long id);

	/**
	 * 更新客户信息
	 * @param CustomerEntity 客户信息对象
	 * @return int 更新是否成功，>1代表更新成功
	 * @author solin
	 * @date 2017-09-22 11:35:12
	 */
	public int updateCustomer(CustomerEntity customerEntity);

	/**
	 * 分页查询客户信息
	 * @param pageParam 分页参数
	 * @param paramMap 查询参数
	 * @return PageBean 分页参数和分页数据
	 * @author solin
	 * @date 2017-09-22 11:35:12
	 */
	public PageBean listCustomerPage(PageParam pageParam, Map<String, Object> paramMap);
	
	/**
	 * 根据条件查询客户信息
	 * @param param
	 * @return 客户信息列表
	 * @author solin
	 * @date 2017-09-22 11:35:12
	 */
	public List<CustomerEntity> listCustomer(Map<String, Object> param);
	
	
	/**
	 * 判断客户账号唯一性
	 * @param userCodeOrMobileOrOpenId
	 * @return
	 * @author: solin
	 * @date: 2017年11月22日 上午10:20:29
	 */
	public List<CustomerEntity> checkCustomerUnique(String userCodeOrMobileOrOpenId);
	
	/**
	 * 变更密码
	 * @param customerId
	 * @param password
	 * @return
	 * @author: solin
	 * @date: 2017年11月24日 上午10:18:29
	 */
	public int updateCustomerPassword(String mobile, String password);
	
	/**
	 * 获取拥有微信OPEN_ID的用户
	 * @param param
	 * @return
	 * @author: solin
	 * @date: 2017年12月4日 下午1:40:41
	 */
	public PageBean listWechatCustomerPage(PageParam pageParam, Map<String, Object> paramMap);
	
	/**
	 * 查询合同上显示的客户代表信息
	 * @return
	 * @author lilp
	 */
	public CustomerEntity  listContractCustomer(Map<String, Object> param);
	
	/**
	 * 统计待审核人员数
	 * @return
	 * @author: solin
	 * @date: 2017年12月26日 下午7:47:59
	 */
	public Integer countPengdingApproval();
	
	/**
	 * 业务员获取我的客户数 
	 * @param salesmanId
	 * @return
	 * @author: solin
	 * @date: 2018年1月1日 下午4:13:20
	 */
	public Integer getMyCustomerCount(String salesmanId);
	
	/**
	 * 获取所有已审核客户数
	 * @return
	 * @author: solin
	 * @date: 2018年1月7日 下午11:02:47
	 */
	public Integer countAuditedCustomers();
	
	/**
	 * 获取新增客户数
	 * @return
	 * @author: solin
	 * @date: 2018年1月7日 下午11:02:47
	 */
	public Integer countNewCustomers(Integer days);


	/**
	 * pc端注册用户
	 * @param customer
	 * @param company
	 */
	public int registUserFromPc(CustomerEntity customer, CompanyEntity company);
	
	/**
	 * 根据邀请码获取用户
	 * @param invitationCode
	 * @return
	 * @author xkl
	 * @date 2018年6月26日 下午7:06:29
	 */
	public CustomerEntity getCustomerByInviationCode(String invitationCode);

	/**
	 * 分页查询客户信息
	 * @param pageParam
	 * @param paramMap
	 * @return
	 */
	public PageBean listCustomerPageForSelector(PageParam pageParam, Map<String, Object> paramMap);
}
